package Datastruct.Linked;


public class DualLinkedList {

    BookNode node=new BookNode(0,"",0.0);

    //返回头部结点
    public  BookNode getHeadnode(){
        return  node;
    }

    //在尾部添加结点
    public  void  addLast(BookNode bookNode){
        BookNode temp=node;
        while (true){
            if(temp.next==null){
                break;
            }
            temp=temp.next;
        }
        temp.next=bookNode;

        bookNode.pre=temp;
    }

    //修改结点
    public  void updateNode(BookNode bookNode){
        if(node.next==null){
            System.out.println("链表为空，无法修改。。");
            return;
        }
        BookNode temp=node;
        boolean flag=false;
        while (true){
            if(temp.next==null){
                break;
            }

            if(temp.id== bookNode.id){
                flag=true;
                break;
            }

            temp=temp.next;
        }


        if(flag){
            temp.name=bookNode.name;
            temp.price= bookNode.price;
        }else{
            System.out.println("没有找到要修改的结点");
        }
    }

    //删除结点
    public  void delNode(BookNode bookNode){
        if (node.next==null){
            System.out.println("当前链表为空");
        }

        BookNode temp=node;
        boolean flag=false;
        while (true){
            if(temp.next==null){
                break;
            }
            if(temp.next.id==bookNode.id){
                flag=true;
                break;
            }
            temp=temp.next;
        }

        if(flag){
            //判断被删除的结点是否有后继 如果有修改它 的前驱指向
            if(temp.next.next!=null){
                temp.next.next.pre=temp;
            }
            //修改当前结点的后继指向
            temp.next=temp.next.next;
        }else {
            System.out.println("需要删除的结点不存在");
        }
    }

    //查看所有结点
    public  void showLinked(){
        if(node.next==null){
            System.out.println("链表为空。。。");
        }
        BookNode temp=node.next;
        while (true){
            if(temp.next==null){
                System.out.println(temp);
                break;
            }
            System.out.println(temp);
            temp=temp.next;

        }
    }
}
